
#include "nane/core/crt/Win32/Win32WriteFile_.h"
#include "nane/core/function/Functor.h"
#include "nane/core/assert.h"

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    Win32WriteFile::Win32WriteFile( FileSystem::Implementation* _creator, HANDLE _interface, const char* _filename )
        : Win32FileBase( _creator, _interface, _filename )
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    Win32WriteFile::~Win32WriteFile()
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    bool Win32WriteFile::Flush()
    {
        return ::FlushFileBuffers(interface) != FALSE;
    }    
    ////////////////////////////////////////////////////////////////////////////////////////////////
    uint32 Win32WriteFile::Write( const byte* _data, uint32 _count )
    {
        NANE_ASSERT_RV( interface != INVALID_HANDLE_VALUE, "file handle must be valid", 0 );
        DWORD bytesWritten = 0;
        ::WriteFile(interface, _data, static_cast<DWORD>(_count), &bytesWritten, NULL);
        return static_cast<uint32>(bytesWritten);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void Win32WriteFile::Dispose()
    {
        creator->Release(this);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane

